package com.baiku.sanhos.mapper;

import com.baiku.sanhos.pojo.dto.UserIndexInfoDTO;
import com.baiku.sanhos.pojo.dto.UserListDTO;
import com.baiku.sanhos.pojo.entity.User;
import com.baiku.sanhos.pojo.vo.UserIndexInfoVO;
import com.baiku.sanhos.pojo.vo.UserIndexVo;
import com.baiku.sanhos.pojo.vo.UserMonthVo;
import com.baiku.sanhos.pojo.vo.UserVo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.Date;
import java.util.List;
import java.util.Map;

@Repository
public interface UserMapper extends BaseMapper<User> {
    /**
     * 删：删除此id对应的用户
     * @param id
     */
    void deleteById(Integer id);

    /**
     * 删
     * @param ids
     */
    void deleteByIds(List<Integer> ids);

    /**
     *查：通过用户名查询用户的账号信息
     * @param username
     * @return
     */
    UserVo selectByUserName(String username);

    /**
     *查：分页 查询用户的信息
     * @param pageSize 一页有几个记录
     * @param offset    偏移量
     * @param username 用户账号
     * @param status  状态
     * @param nickname 用户名字
     * @return
     */
    List<UserIndexVo> selectAll(int pageSize,int offset,String username,Integer status,String nickname);

    /**
     * 查：查询此id对应的用户
     * @param id
     * @return
     */
    User selectById(Integer id);

    /**
     * 查：分页 查询所有用户信息
     * @param username
     * @param status
     * @param nickname
     * @return
     */
    int getTotalUsers(String username,Integer status, String nickname);

    /**
     * 查：获取id对应的用户信息
     * @param id
     * @return
     */
    User getSelectById(Integer id);

    /**
     * 查：查询用户充值的时间，jine
     * @return
     */
    List<UserMonthVo> selectMonth();

    /**
     * 改：插入一个用户到表中
     * @param user
     * @return
     */
    int insert(User user);

    /**
     * 改：更改用户信息
     * @param user
     * @return
     */
    int updateById(User user);

    /**
     * 改：分页 根据id修改充值金额
     * @param id
     * @param topUpAmount
     * @param recharge_time
     */
    void updateUserById(Integer id, @Param("amount") Double topUpAmount,@Param("recharge_time") Date recharge_time);

    /**
     *改：根据用户id编辑用户信息
     * @param userListDTO
     */
    void editUserById(UserListDTO userListDTO);

    int insertAll(Map<String, Object> userParams);

    /**
     * 获取用户首页默认用户数据
     * @param username 用户账号
     * @return UserIndexInfoVO
     */
    UserIndexInfoVO getUserInfo(String username);
    /**
     * 修改首页默认用户数据
     * @param userIndexInfoDTO 用户对象
     */
    void updateUserInfo(UserIndexInfoDTO userIndexInfoDTO);
    List <User> loadByPhone(String phone);
}

